package ar.edu.unju.fi.model.dao.impl;

import java.util.List;



import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import ar.edu.unju.fi.model.domain.Usuario;
import ar.edu.unju.fi.model.dao.UsuarioDAO;

public class UsuarioDAOImpl extends HibernateDaoSupport implements UsuarioDAO {

	@SuppressWarnings("unchecked")
	public Usuario validarAcceso(Integer documento, String password) {

		Criteria criteria = getSession().createCriteria(Usuario.class);
		criteria.add(Restrictions.eq("documento",documento));
		criteria.add(Restrictions.eq("password",password));
		
		return (Usuario) criteria.uniqueResult();

	}

	public void save(Usuario usuario) {
			logger.info("guardando el usuario");
	        try {
				getHibernateTemplate().save(usuario);
			} catch (Exception e) {
				logger.error("Error al guardar el usuario");
			}
		    
	}

	public List<Usuario> getAll() {
		logger.info("cargando los usuarios");
		Criteria criteria = getSession().createCriteria(Usuario.class);
		return criteria.list();
	}

	public List<Usuario> getAll(String nombre) {
		logger.info("cargando los usuarios segun el nombre");
		Criteria criteria = getSession().createCriteria(Usuario.class);
        if(!nombre.isEmpty())
            criteria.add(Restrictions.ilike("nombre", "%"+nombre+"%"));
        return criteria.list();
		
	}

	public void update(Usuario usuario) {
		logger.info("actualizando el usuario");
		try {
			getHibernateTemplate().update(usuario);
		} catch (Exception e) {
			logger.error("Error al actualizar el usuario");
		}
		
	}

	public Usuario validarUsuario(Usuario u) {
		logger.info("validando el usuario");
		Criteria criteria = getSession().createCriteria(Usuario.class);
		criteria.add(Restrictions.eq("documento",u.getDocumento()));
		criteria.add(Restrictions.eq("password",u.getPassword()));
		
		return (Usuario) criteria.uniqueResult();
	}

}
